Generated by Cython 3.0.2
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: ccm_helper_functions.c
+01: # cython: infer_types=True, wraparound=False, nonecheck=False, boundscheck=False, cdivision=True, language_level=3, profile=True, autogen_pxd=True
__pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
02:
+03: import numpy as np
__pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 3, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(1, 3, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
04: cimport numpy as np
05:
06:
+07: def check_even_square(np.ndarray image_arr):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_1check_even_square(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_check_even_square, "\n Function used to check if an image array is an even square.\n :param image_arr: numpy array with shape (t, y, x)\n :return: bool, True if an image array is an even square\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_1check_even_square = {"check_even_square", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_1check_even_square, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_check_even_square}; static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_1check_even_square(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_image_arr = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("check_even_square (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 7, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image_arr,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_image_arr)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 7, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "check_even_square") < 0)) __PYX_ERR(1, 7, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } __pyx_v_image_arr = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("check_even_square", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 7, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.check_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_image_arr), __pyx_ptype_5numpy_ndarray, 1, "image_arr", 0))) __PYX_ERR(1, 7, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_check_even_square(__pyx_self, __pyx_v_image_arr); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_check_even_square(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_image_arr) { PyObject *__pyx_r = NULL; __Pyx_TraceDeclarations __Pyx_TraceFrameInit(__pyx_codeobj__11) __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("check_even_square", 0); __Pyx_TraceCall("check_even_square", __pyx_f[1], 7, 0, __PYX_ERR(1, 7, __pyx_L1_error)); /* … */ /* function exit code */ __pyx_L1_error:; __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.check_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r, 0); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_s_image_arr); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); /* … */ __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_1check_even_square, 0, __pyx_n_s_check_even_square, NULL, __pyx_n_s_nanopyx_core_analysis_ccm_helper, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_even_square, __pyx_t_7) < 0) __PYX_ERR(1, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_nanopyx_core_analysis_ccm_he, __pyx_n_s_check_even_square, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(1, 7, __pyx_L1_error)
08: """
09: Function used to check if an image array is an even square.
10: :param image_arr: numpy array with shape (t, y, x)
11: :return: bool, True if an image array is an even square
12: """
+13: return _check_even_square(image_arr)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(((PyObject *)__pyx_v_image_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 13, __pyx_L1_error) __pyx_t_2 = __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__check_even_square(__pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 13, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1); __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
14:
15:
+16: cdef bint _check_even_square(float[:, :, :] image_arr) nogil:
static int __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__check_even_square(__Pyx_memviewslice __pyx_v_image_arr) {
int __pyx_v_w;
int __pyx_v_h;
int __pyx_r;
__Pyx_TraceDeclarations
__Pyx_TraceCall("_check_even_square", __pyx_f[1], 16, 1, __PYX_ERR(1, 16, __pyx_L1_error));
/* … */
/* function exit code */
__pyx_L1_error:;
#ifdef WITH_THREAD
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions._check_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
__pyx_L0:;
__Pyx_TraceReturn(Py_None, 1);
return __pyx_r;
}
+17: cdef int w = image_arr.shape[2]
__pyx_v_w = (__pyx_v_image_arr.shape[2]);
+18: cdef int h = image_arr.shape[1]
__pyx_v_h = (__pyx_v_image_arr.shape[1]);
19:
+20: if w != h:
__pyx_t_1 = (__pyx_v_w != __pyx_v_h);
if (__pyx_t_1) {
/* … */
}
+21: return False
__pyx_r = 0;
goto __pyx_L0;
+22: if w % 2 != 0:
__pyx_t_1 = ((__pyx_v_w % 2) != 0);
if (__pyx_t_1) {
/* … */
}
+23: return False
__pyx_r = 0;
goto __pyx_L0;
24:
+25: return True
__pyx_r = 1; goto __pyx_L0;
26:
27:
+28: def get_closest_even_square_size(np.ndarray image_arr):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_3get_closest_even_square_size(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_2get_closest_even_square_size, "\n Function used to calculate the closest even square.\n :param image_arr: numpy array with shape (t, y, x); image to be cropped\n :return: int; value of dimensions to be used for cropping\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_3get_closest_even_square_size = {"get_closest_even_square_size", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_3get_closest_even_square_size, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_2get_closest_even_square_size}; static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_3get_closest_even_square_size(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_image_arr = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_closest_even_square_size (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 28, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image_arr,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_image_arr)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 28, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_closest_even_square_size") < 0)) __PYX_ERR(1, 28, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } __pyx_v_image_arr = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_closest_even_square_size", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 28, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.get_closest_even_square_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_image_arr), __pyx_ptype_5numpy_ndarray, 1, "image_arr", 0))) __PYX_ERR(1, 28, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_2get_closest_even_square_size(__pyx_self, __pyx_v_image_arr); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_2get_closest_even_square_size(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_image_arr) { PyObject *__pyx_r = NULL; __Pyx_TraceDeclarations __Pyx_TraceFrameInit(__pyx_codeobj__12) __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_closest_even_square_size", 0); __Pyx_TraceCall("get_closest_even_square_size", __pyx_f[1], 28, 0, __PYX_ERR(1, 28, __pyx_L1_error)); /* … */ /* function exit code */ __pyx_L1_error:; __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.get_closest_even_square_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r, 0); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_3get_closest_even_square_size, 0, __pyx_n_s_get_closest_even_square_size, NULL, __pyx_n_s_nanopyx_core_analysis_ccm_helper, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_closest_even_square_size, __pyx_t_7) < 0) __PYX_ERR(1, 28, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* … */ __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_nanopyx_core_analysis_ccm_he, __pyx_n_s_get_closest_even_square_size, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(1, 28, __pyx_L1_error)
29: """
30: Function used to calculate the closest even square.
31: :param image_arr: numpy array with shape (t, y, x); image to be cropped
32: :return: int; value of dimensions to be used for cropping
33: """
+34: return _get_closest_even_square_size(image_arr)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(((PyObject *)__pyx_v_image_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(1, 34, __pyx_L1_error) __pyx_t_2 = __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__get_closest_even_square_size(__pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 34, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_1, 1); __pyx_t_1.memview = NULL; __pyx_t_1.data = NULL; __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0;
35:
36:
+37: cdef int _get_closest_even_square_size(float[:, :, :] image_arr) nogil:
static int __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__get_closest_even_square_size(__Pyx_memviewslice __pyx_v_image_arr) {
int __pyx_v_w;
int __pyx_v_h;
int __pyx_v_min_size;
int __pyx_r;
__Pyx_TraceDeclarations
__Pyx_TraceCall("_get_closest_even_square_size", __pyx_f[1], 37, 1, __PYX_ERR(1, 37, __pyx_L1_error));
/* … */
/* function exit code */
__pyx_L1_error:;
#ifdef WITH_THREAD
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions._get_closest_even_square_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
__pyx_L0:;
__Pyx_TraceReturn(Py_None, 1);
return __pyx_r;
}
+38: cdef int w = image_arr.shape[2]
__pyx_v_w = (__pyx_v_image_arr.shape[2]);
+39: cdef int h = image_arr.shape[1]
__pyx_v_h = (__pyx_v_image_arr.shape[1]);
+40: cdef int min_size = min(w, h)
__pyx_t_1 = __pyx_v_h;
__pyx_t_2 = __pyx_v_w;
__pyx_t_4 = (__pyx_t_1 < __pyx_t_2);
if (__pyx_t_4) {
__pyx_t_3 = __pyx_t_1;
} else {
__pyx_t_3 = __pyx_t_2;
}
__pyx_v_min_size = __pyx_t_3;
41:
+42: if min_size % 2 != 0:
__pyx_t_4 = ((__pyx_v_min_size % 2) != 0);
if (__pyx_t_4) {
/* … */
}
+43: min_size -= 1
__pyx_v_min_size = (__pyx_v_min_size - 1);
44:
+45: return min_size
__pyx_r = __pyx_v_min_size; goto __pyx_L0;
46:
47:
+48: def make_even_square(np.ndarray image_arr):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_5make_even_square(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_4make_even_square, "\n Function used to crop an image array into an even square.\n :param image_arr: numpy array with shape (t, y, x); image to be cropped\n :return: numpy array with shape (t, y, x)\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_5make_even_square = {"make_even_square", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_5make_even_square, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_8analysis_20ccm_helper_functions_4make_even_square}; static PyObject *__pyx_pw_7nanopyx_4core_8analysis_20ccm_helper_functions_5make_even_square(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_image_arr = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("make_even_square (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 48, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image_arr,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_image_arr)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 48, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "make_even_square") < 0)) __PYX_ERR(1, 48, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } __pyx_v_image_arr = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("make_even_square", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 48, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.make_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_image_arr), __pyx_ptype_5numpy_ndarray, 1, "image_arr", 0))) __PYX_ERR(1, 48, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_4make_even_square(__pyx_self, __pyx_v_image_arr); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_8analysis_20ccm_helper_functions_4make_even_square(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_image_arr) { PyObject *__pyx_r = NULL; __Pyx_TraceDeclarations __Pyx_TraceFrameInit(__pyx_codeobj__13) __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("make_even_square", 0); __Pyx_TraceCall("make_even_square", __pyx_f[1], 48, 0, __PYX_ERR(1, 48, __pyx_L1_error)); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __PYX_XCLEAR_MEMVIEW(&__pyx_t_4, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions.make_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r, 0); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_8analysis_20ccm_helper_functions_5make_even_square, 0, __pyx_n_s_make_even_square, NULL, __pyx_n_s_nanopyx_core_analysis_ccm_helper, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_even_square, __pyx_t_7) < 0) __PYX_ERR(1, 48, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
49: """
50: Function used to crop an image array into an even square.
51: :param image_arr: numpy array with shape (t, y, x); image to be cropped
52: :return: numpy array with shape (t, y, x)
53: """
+54: return np.array(_make_even_square(image_arr))
__Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(((PyObject *)__pyx_v_image_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 54, __pyx_L1_error) __pyx_t_5 = __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__make_even_square(__pyx_t_4); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 54, __pyx_L1_error) __PYX_XCLEAR_MEMVIEW(&__pyx_t_4, 1); __pyx_t_4.memview = NULL; __pyx_t_4.data = NULL; __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_5, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __PYX_XCLEAR_MEMVIEW(&__pyx_t_5, 1); __pyx_t_5.memview = NULL; __pyx_t_5.data = NULL; __pyx_t_6 = NULL; __pyx_t_7 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_7 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_2}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
55:
56:
+57: cdef float[:, :, :] _make_even_square(float[:, :, :] image_arr) nogil:
static __Pyx_memviewslice __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__make_even_square(__Pyx_memviewslice __pyx_v_image_arr) {
int __pyx_v_w;
int __pyx_v_h;
int __pyx_v_min_size;
int __pyx_v_h_start;
int __pyx_v_h_finish;
int __pyx_v_w_start;
int __pyx_v_w_finish;
__Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_TraceDeclarations
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_make_even_square", 1);
__Pyx_TraceCall("_make_even_square", __pyx_f[1], 57, 1, __PYX_ERR(1, 57, __pyx_L1_error));
/* … */
/* function exit code */
__pyx_L1_error:;
#ifdef WITH_THREAD
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__PYX_XCLEAR_MEMVIEW(&__pyx_t_3, 1);
__pyx_r.data = NULL;
__pyx_r.memview = NULL;
__Pyx_AddTraceback("nanopyx.core.analysis.ccm_helper_functions._make_even_square", __pyx_clineno, __pyx_lineno, __pyx_filename);
goto __pyx_L2;
__pyx_L0:;
if (unlikely(!__pyx_r.memview)) {
#ifdef WITH_THREAD
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
}
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
__pyx_L2:;
__Pyx_TraceReturn(Py_None, 1);
__Pyx_RefNannyFinishContextNogil()
return __pyx_r;
}
+58: if _check_even_square(image_arr):
__pyx_t_1 = __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__check_even_square(__pyx_v_image_arr); if (unlikely(__pyx_t_1 == ((int)-1) && __Pyx_ErrOccurredWithGIL())) __PYX_ERR(1, 58, __pyx_L1_error) if (__pyx_t_1) { /* … */ }
+59: return image_arr
__PYX_INC_MEMVIEW(&__pyx_v_image_arr, 0);
__pyx_r = __pyx_v_image_arr;
goto __pyx_L0;
60:
+61: cdef int w = image_arr.shape[2]
__pyx_v_w = (__pyx_v_image_arr.shape[2]);
+62: cdef int h = image_arr.shape[1]
__pyx_v_h = (__pyx_v_image_arr.shape[1]);
+63: cdef int min_size = _get_closest_even_square_size(image_arr)
__pyx_t_2 = __pyx_f_7nanopyx_4core_8analysis_20ccm_helper_functions__get_closest_even_square_size(__pyx_v_image_arr); if (unlikely(__pyx_t_2 == ((int)-1) && __Pyx_ErrOccurredWithGIL())) __PYX_ERR(1, 63, __pyx_L1_error) __pyx_v_min_size = __pyx_t_2;
64: cdef int h_start, h_finish, w_start, w_finish
65:
+66: h_start = (h-min_size)//2
__pyx_v_h_start = ((__pyx_v_h - __pyx_v_min_size) / 2);
+67: if (h-min_size) % 2 != 0:
__pyx_t_1 = (((__pyx_v_h - __pyx_v_min_size) % 2) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L4;
}
+68: h_finish = h - (h-min_size) // 2 - 1
__pyx_v_h_finish = ((__pyx_v_h - ((__pyx_v_h - __pyx_v_min_size) / 2)) - 1);
69: else:
+70: h_finish = h - (h-min_size) // 2
/*else*/ {
__pyx_v_h_finish = (__pyx_v_h - ((__pyx_v_h - __pyx_v_min_size) / 2));
}
__pyx_L4:;
71:
+72: w_start = int((w-min_size)/2)
__pyx_v_w_start = ((int)(((long)(__pyx_v_w - __pyx_v_min_size)) / 2));
+73: if (w - min_size) % 2 != 0:
__pyx_t_1 = (((__pyx_v_w - __pyx_v_min_size) % 2) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L5;
}
+74: w_finish = w - (w-min_size) // 2 - 1
__pyx_v_w_finish = ((__pyx_v_w - ((__pyx_v_w - __pyx_v_min_size) / 2)) - 1);
75: else:
+76: w_finish = w - (w-min_size) // 2
/*else*/ {
__pyx_v_w_finish = (__pyx_v_w - ((__pyx_v_w - __pyx_v_min_size) / 2));
}
__pyx_L5:;
77:
+78: return image_arr[:, h_start:h_finish, w_start:w_finish]
__pyx_t_3.data = __pyx_v_image_arr.data;
__pyx_t_3.memview = __pyx_v_image_arr.memview;
__PYX_INC_MEMVIEW(&__pyx_t_3, 0);
__pyx_t_3.shape[0] = __pyx_v_image_arr.shape[0];
__pyx_t_3.strides[0] = __pyx_v_image_arr.strides[0];
__pyx_t_3.suboffsets[0] = -1;
__pyx_t_2 = -1;
if (unlikely(__pyx_memoryview_slice_memviewslice(
&__pyx_t_3,
__pyx_v_image_arr.shape[1], __pyx_v_image_arr.strides[1], __pyx_v_image_arr.suboffsets[1],
1,
1,
&__pyx_t_2,
__pyx_v_h_start,
__pyx_v_h_finish,
0,
1,
1,
0,
1) < 0))
{
__PYX_ERR(1, 78, __pyx_L1_error)
}
if (unlikely(__pyx_memoryview_slice_memviewslice(
&__pyx_t_3,
__pyx_v_image_arr.shape[2], __pyx_v_image_arr.strides[2], __pyx_v_image_arr.suboffsets[2],
2,
2,
&__pyx_t_2,
__pyx_v_w_start,
__pyx_v_w_finish,
0,
1,
1,
0,
1) < 0))
{
__PYX_ERR(1, 78, __pyx_L1_error)
}
__pyx_r = __pyx_t_3;
__pyx_t_3.memview = NULL;
__pyx_t_3.data = NULL;
goto __pyx_L0;